package com.siwei.mes.mapper.materials;

import com.siwei.mes.common.base.BaseMapper;
import com.siwei.mes.entity.dto.SupplierCompanyMaterialsDto;
import com.siwei.mes.entity.dto.SupplierCompanyMaterialsFactoryDto;
import com.siwei.mes.entity.dto.SupplierCompanyMaterialsSelfSupplyDto;
import com.siwei.mes.entity.system.SupplierCompanyMaterials;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 供应商物料表(SupplierCompanyMaterials)表数据库访问层
 *
 * @author linzi
 * @since 2024-07-17 23:04:41
 */
public interface SupplierCompanyMaterialsMapper extends BaseMapper<SupplierCompanyMaterials> {
    /**
     * 获取所有
     *
     * @param entity
     * @return
     */
    List<SupplierCompanyMaterials> getList(SupplierCompanyMaterials entity);

    /**
     * 根据id获取
     *
     * @param id
     * @return
     */
    SupplierCompanyMaterials loadById(@Param("id") Long id);

    /**
     * 需要批量修改供应商物料对应的材料id（specId）
     *
     * @param materialsId 物料id
     * @param specId      物料规格设置id
     */
    void updateSpecIdByMaterialsId(@Param("materialsId") Long materialsId, @Param("specId") Long specId);

    /**
     * 根据类型、名称、规格获取对应的厂家
     *
     * @param type         类型
     * @param name         名称
     * @param spec         规格
     * @param supplierName 供应商名称
     * @return
     */
    List<String> getManufacturerList(@Param("type") Integer type, @Param("name") String name,
                                     @Param("spec") String spec, @Param("supplierName") String supplierName);

    /**
     * 判断是否存在
     *
     * @param entity
     * @return
     */
    SupplierCompanyMaterials checkIsExist(SupplierCompanyMaterials entity);


    /**
     * 根据材料名称+材料规格+供应商id获取所有生产厂家
     *
     * @param supplierCompanyId
     * @param materialsName
     * @param materialsSpec
     * @return
     */
    List<SupplierCompanyMaterialsFactoryDto> getFactoryList(@Param("supplierCompanyId") Long supplierCompanyId, @Param("materialsName") String materialsName, @Param("materialsSpec") String materialsSpec);

    /**
     * 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     *
     * @param materialsType
     * @return
     */
    List<SupplierCompanyMaterialsFactoryDto> getFactoryListByMaterialsType(@Param("materialsType") Integer materialsType);

    /**
     * 根据物料类型和生产厂家名称获取生产厂家简称
     * 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     *
     * @param materialsType
     * @return
     */
    String getFactoryCalledListByMaterialsType(@Param("materialsType") Integer materialsType, @Param("manufacturers") String manufacturers);

    /**
     * 根据物料类型获取所有物料名称
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @return
     */
    List<String> getMaterialsNameList(@Param("materialsType") Integer materialsType);

    /**
     * 根据物料类型+物料名称获取所有物料规格
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @param materialsName 物料名称
     * @return
     */
    List<SupplierCompanyMaterialsDto> getMaterialsSpecList(@Param("materialsType") Integer materialsType, @Param("materialsName") String materialsName);

    /**
     * 根据物料类型+物料名称+物料规格获取所有生产厂家
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @param materialsName 物料名称
     * @param materialsSpec 物料规格
     * @return
     */
    List<SupplierCompanyMaterialsFactoryDto> getMaterialsFactoryList(@Param("materialsType") Integer materialsType,
                                                                     @Param("materialsName") String materialsName,
                                                                     @Param("materialsSpec") String materialsSpec);

    List<SupplierCompanyMaterialsSelfSupplyDto> getMaterialsSelfSupplyList(SupplierCompanyMaterialsSelfSupplyDto dto);
}
